from contextlib import closing

import pymysql


def con_my_sql(conn, sql_code, params=None):
    """
    执行SQL语句的函数，支持参数化查询，增强安全性。
    """
    try:
        # 尝试重连数据库（如果连接断开的情况下）
        conn.ping(reconnect=True)

        # 使用上下文管理器确保游标被正确关闭
        with closing(conn.cursor(pymysql.cursors.DictCursor)) as cursor:
            if params:
                cursor.execute(sql_code, params)
            else:
                cursor.execute(sql_code)
            # 如果是增删改操作，提交事务
            if sql_code.lower().startswith(('insert', 'update', 'delete')):
                conn.commit()
            return cursor.fetchall()
    except Exception as e:
        print(e)
        # 如果出现异常，回滚事务
        conn.rollback()
        return type(e), e



